package com.lazi.june.common.base;

/**
 * 请求常量定义
 * <p>
 * 统一管理所有 HTTP 请求头常量，避免在代码中硬编码字符串。
 * 包括认证、追踪、租户、客户端信息等请求头。
 * <p>
 * 使用示例：
 * <pre>
 * String token = request.getHeader(RequestConst.TOKEN);
 * String traceId = request.getHeader(RequestConst.TRACE_ID);
 * </pre>
 *
 * @author huliqian
 * @since 2025/8/22
 */
public interface RequestConst {

    // ==================== 认证相关 ====================

    /**
     * JWT Token 请求头
     * <p>
     * 标准的 Authorization 请求头，格式：Bearer {token}
     */
    String TOKEN = "Authorization";

    /**
     * 内部服务调用密钥
     * <p>
     * 用于微服务之间的内部调用认证，防止外部直接访问内部接口
     */
    String INTERNAL_SECRET = "X-Internal-Secret";

    // ==================== 用户和租户信息 ====================

    /**
     * 用户信息
     * <p>
     * 网关解析 JWT 后传递给下游服务的用户信息（通常为 JSON 格式）
     */
    String USER_INFO = "X-User-Info";

    /**
     * 租户 ID
     * <p>
     * 多租户架构中标识当前请求所属的租户
     */
    String TENANT_ID = "X-Tenant-ID";

    // ==================== 客户端信息 ====================

    /**
     * 应用 ID
     * <p>
     * 标识发起请求的应用程序（如 iOS App、Android App、Web 等）
     */
    String APP_ID = "X-App-ID";

    /**
     * 客户端版本
     * <p>
     * 客户端应用的版本号，用于版本控制和兼容性处理
     */
    String VERSION = "X-Client-Version";

    /**
     * 设备类型
     * <p>
     * 设备类型标识，如：MOBILE、TABLET、DESKTOP、TV 等
     */
    String DEVICE_TYPE = "X-Device-Type";

    /**
     * 平台类型
     * <p>
     * 客户端平台标识，如：IOS、ANDROID、WEB、WECHAT_MINI 等
     */
    String PLATFORM = "X-Platform";

    // ==================== 追踪和调试 ====================

    /**
     * 追踪 ID
     * <p>
     * 分布式链路追踪 ID，用于关联同一次请求在多个服务间的调用链路
     */
    String TRACE_ID = "X-Trace-Id";

    /**
     * 请求 ID
     * <p>
     * 单次请求的唯一标识，用于日志关联和问题排查
     */
    String REQUEST_ID = "X-Request-Id";

    // ==================== 网络信息 ====================

    /**
     * 真实客户端 IP
     * <p>
     * 经过代理、负载均衡器后的真实客户端 IP 地址
     * 格式：client, proxy1, proxy2
     */
    String FORWARDED_FOR = "X-Forwarded-For";

    /**
     * 原始请求协议
     * <p>
     * 客户端原始使用的协议（http 或 https）
     */
    String FORWARDED_PROTO = "X-Forwarded-Proto";

    /**
     * 原始请求主机
     * <p>
     * 客户端原始请求的主机名
     */
    String FORWARDED_HOST = "X-Forwarded-Host";
}
